package cn.appsys.logger;

import java.util.Arrays;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;

/**
 * 日志增强类，实现对业务层中所有方法添加日志增强处理。
 * 
 * @author wenjie
 */
public class AppSysServiceLogger {

	private Logger logger = Logger.getLogger(AppSysServiceLogger.class);

	// 定义两个横切逻辑，
	public void before(JoinPoint jp) { // JoinPoint 连接点对象。
		// jp是连接点对象(即要切入的那个方法对象)，通过jp可以得到这个方法的所在的类名，方法名，入参
		logger.info("调用了" + jp.getTarget() + "类中的"
				+ jp.getSignature().getName() + "方法，其中方法的入参是："
				+ Arrays.toString(jp.getArgs()));
	}

	// 代表后置增强的方法
	public void afterReturning(JoinPoint jp, Object result) {
		logger.info("调用" + jp.getTarget() + "的" + jp.getSignature().getName()
				+ "方法。方法返回值：" + result);
	}

	//異常拋出增強
	public void afterThrowing(JoinPoint jp, RuntimeException e) {
		logger.error(jp.getSignature().getName() + "方法发生异常：" + e);
	}

	// 在调用方法之后加入横切逻辑
	public void after(JoinPoint jp) { // result为调用方法之后的返回值 , Object result
		logger.info("调用了" + jp.getTarget() + "类中的"
				+ jp.getSignature().getName() + "方法，方法已執行完畢");
	}

}
